package com.xiaoyu.sort.basic;

import java.util.Arrays;

/**
 * @program: DS_and_A
 * @description: 选择排序
 *
 *  每次挑个最小的值到最前面
 *
 * @author: YuWenYi
 * @create: 2021-04-28 20:48
 **/

public class SelectSort {

    public static void selectSort(int[] arr){
        int min;
        int minIndex;
        for (int i = 0; i < arr.length - 1; i++) { //循环arr.length - 1次即可,每次都获取最小值放在最前面
            min = arr[i];  //每次假设最小值都是第一个
            minIndex = i;  //记录最小值的索引
            for (int j = i+1; j < arr.length ; j++) {
                if (min > arr[j]){ //如果改成< ,那么就是从大到小排序
                    min = arr[j];  //遍历数组,如果发现有比那个最小值还小的值,就记录该值
                    minIndex = j;  //同时记录该值的索引
                }
            }
            //temp = arr[i];      并不需要这样去交换值
            //arr[i] = arr[minIndex];
            //arr[minIndex] = temp;
            arr[minIndex] = arr[i];  //此时获取的就是arr中真正的最小值,然后交换首位与该最小值的位置,即可
            arr[i] = min;
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[]{-9,2,7,4,6,-20,8,-16,5,4,15};
        int[] nums = new int[]{0,1,4,2,3,4};

        //速率测试
        int[] bigData = new int[80000];
        for (int i = 0; i < 80000; i++) {
            bigData[i] = (int)(Math.random() * 80000);
        }
        long start = System.currentTimeMillis();
        selectSort(bigData);
        long stop = System.currentTimeMillis();

        System.out.println((stop-start)/1000.0); //3秒左右

    }
}
